<html><head><meta charset="utf-8"/><title>Chaining</title></head><body><h1>Chaining</h1><div class="x-wiki-content x-main-content">
 <p>
  还记得jQuery支持链式调用吗？
 </p>
 <pre><code>$('a').attr('target', '_blank')
      .append(' &lt;i class="uk-icon-external-link"&gt;&lt;/i&gt;')
      .click(function () {});
</code></pre>
 <p>
  如果我们有一组操作，用underscore提供的函数，写出来像这样：
 </p>
 <pre><code>_.filter(_.map([1, 4, 9, 16, 25], Math.sqrt), x =&gt; x % 2 === 1);
// [1, 3, 5]
</code></pre>
 <p>
  能不能写成链式调用？
 </p>
 <p>
  能！
 </p>
 <p>
  underscore提供了把对象包装成能进行链式调用的方法，就是
  <code>
   chain()
  </code>
  函数：
 </p>
 <pre><code class="language-x-javascript">----
var r = _.chain([1, 4, 9, 16, 25])
         .map(Math.sqrt)
         .filter(x =&gt; x % 2 === 1)
         .value();
----
console.log(r); // [1, 3, 5]
</code></pre>
 <p>
  因为每一步返回的都是包装对象，所以最后一步的结果需要调用
  <code>
   value()
  </code>
  获得最终结果。
 </p>
 <h3>
  小结
 </h3>
 <p>
  通过学习underscore，是不是对JavaScript的函数式编程又有了进一步的认识？
 </p>
</div>
</body></html>